#ifndef TABLEBUTTONFUNCTION_H
#define TABLEBUTTONFUNCTION_H

#include <QWidget>
#include <QHBoxLayout>
#include "CommandSendorReceive.h"
#include "MyDatabase.h"
#include "AlterDataDialog.h"

class TableButtonFunction : public QWidget
{
    Q_OBJECT
public:
    /**
     * @brief  构造函数和析构函数
     */
    explicit TableButtonFunction(QWidget *parent = nullptr);
    virtual ~TableButtonFunction() = default; // 虚析构函数确保正确释放资源

    /**
     * @brief  设置显示表最后一列的按键以及对应功能
     * @param  model 模型类QStandardItemModel对象指针
     * @param  tableView 控件QTableView的对象指针
     * @param  IconNum 需要添加哪些按键功能的索引列表
     * @param  DataCount 显示控件中每次添加数据的行数
     */
    void addButton(QStandardItemModel *model,
                   QTableView *tableView,
                   const QList<IconNumber>& IconNum,
                   const int& DataCount);

signals:
    void sendtoAPIdisplay(QTableView*, const int&, const int&, const int&);
    void sendAlterUi(QTableView*, const int&, const int&);
    /**
     * @brief  发送AGV任务发送界面显示信息
     */
    void sendAGV_task(const int&, const int&);
public slots:
    /**
    * @brief  获取修改的数据修改到ui中
    * @param  table 控件QTableView对象指针
    * @param  listdata 修改的数据列表
    * @param  index table行索引
    */
    void alterUIData(QTableView* table,
                     const QStringList& listdata,
                     const int& index);

    /**
    * @brief  获取到需要发送添加数据的数据
    * @param  table 控件QTableView对象指针
    * @param  listdata 修改的数据列表
    * @param  IconList 图标索引列表
    */
    void alterAddData(QTableView* table,
                      const QStringList& listdata,
                      const QList<IconNumber>& IconList);

    /**
    * @brief  获取添加界面的序号，发送显示界面
    * @param  table 控件QTableView对象指针
    * @param  index table行索引
    * @param  operation_type 功能码
    */
    void AddViewWindow(QTableView* table,
                       const int& index,
                       const int& operation_type);

    /**
    * @brief  AGV暂停或继续
    * @param  tableView 控件QTableView对象指针
    */
    void taskpauseorstart(QTableView *tableView);

    /**
    * @brief  AGV重定位
    * @param  tableView 控件QTableView对象指针
    */
    void agvrelocation(QTableView *tableView);

    /**
    * @brief  注销任务
    * @param  tableView 控件QTableView对象指针
    */
    void canceltask(QTableView *tableView);

    /**
    * @brief  显示详细信息
    * @param  tableView 控件QTableView对象指针
    */
    void detaileddatashows(QTableView *tableView);

    /**
    * @brief  修改数据
    * @param  tableView 控件QTableView对象指针
    */
    void editselecteditem(QTableView *tableView);

    /**
    * @brief  删除数据
    * @param  tableView 控件QTableView对象指针
    */
    void clearselecteditem(QTableView *tableView);

    /**
    * @brief  中转平台，任务接替
    * @param  tableView 控件QTableView对象指针
    */
    void taskReplacement(QTableView *tableView);

    /**
    * @brief  子任务，需要换车
    * @param  tableView 控件QTableView对象指针
    */
    void AGVReplacement(QTableView *tableView);

    /**
    * @brief  子任务，人工辅助完成
    * @param  tableView 控件QTableView对象指针
    */
    void Manual(QTableView *tableView);

private:
    AlterDataDialog *Alter_Data;
};

#endif // TABLEBUTTONFUNCTION_H
